uvm testbench简介(作用,结构以及搭建步骤) |
您所在的位置:网站首页 › uvm test top › uvm testbench简介(作用,结构以及搭建步骤) |
参考资料:
(1) 《uvm cookbook》; (2) 公众号-芯片学堂; (3) 《uvm user guide》; (4) 从run_test浅谈Test Bench的启动 (qq.com) (5) 《practical UVM step by step with IEEE》第二章; 1.uvm tb 1.1 uvm tb作用(1) 实例化DUT模块以及UVM Test class(通过在tb.sv的initial begin-end块内调用run_test函数实现); (2) 实现DUT与验证环境的连接(interface binding以及uvm_config_db::set(), uvm_config_db::get()); (3) 时钟产生(复位信号由UVM testbench提供); 注1:需要指明timescale; 注2:时钟生成放到module内部实现,不要在testbench中产生时钟;(《practical UVM step by step with IEEE》2.7章) (1) hdl_top包含interface和DUT; (2) hvl_top包含启动uvm验证平台的initial begin-end块; 注:详见uvm cookbook; (1) 作用: DUT激励; (2) 派生关系: UVM class library提供uvm_sequence_item基类(uvm_sequence_item派生于uvm_transaction);每一个user-defined data item都应该直接或间接派生于uvm_sequence_item; (3) 创建user-defined transaction: (3.1) 根据DUT transaction spec,弄清楚专用的约束、任务与函数; (3.2) 从uvm_sequence_item基类或其派生类构建新的派生类; (3.3) 定义构造函数; (3.4) 为transaction类添加成员变量; (3.5) 使用uvm field宏以便于直接使用print, copy, compare等函数; (4) 示例 详见seq部分文档(声明seq&启动seq); 3.3 构建sequencer & virtual sequencer详见sequencer部分文档; 3.4 构建driver(1)作用:从sequencer获取data item,然后按照接口协议把data item驱动到总线上; (2)派生关系:UVM类库提供uvm_driver基类,所有的driver类都应该直接或间接的派生自uvm_driver; (3)创建 (3.1) 从uvm_driver类派生; (3.2) 使用UVM field automation机制实现print, copy, compare等函数的自动定义; (3.3) 获取来自sequencer的下一个data item; (3.4) 在driver中声明一个virtual interface,为了实现driver与DUT的连接; (4)示例 (1)作用:负责从bus上提取信号信息,转换成事件,数据和状态信息,然后通过TLM port将信息传递给其他uvc; (2)示例: (1)作用:实例化driver, monitor, sequencer并采用TLM port实现其连接(为了提高灵活性, agent也会包含配置信息以及其他参数);
(2) 工作模式(active mode与passive mode) (2.1) active mode: agent需要实例化driver, sequencer, monitor; (2.2) passive mode: agent不需要实例化driver,sequencer,仅仅需要实例化monitor; (3) 示例 (1) assertion check示例 (2) 函数check示例 (3) 功能覆盖率的收集 (3.1) 功能覆盖率的收集是通过sv的covergroup实现的; covergroup的关键在于coverpoint与bin的确定以及什么时候收集覆盖率; (1)作用:可复用组件的容器,它实例化并配置所有的子组件; (2)示例: 篇?-uvm_test - 蚕食鲸吞 - 博客园 (cnblogs.com)
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |